--- 模块功能：日志生成器.
-- @author zhangFenghe
-- @module logGenerator.generateLog
-- @license MIT
-- @copyright zhangFenghe
-- @release 2022.04.29
module(..., package.seeall)
require "nvm"
require "io"
nvm.init("config.lua", true)
local PREESURE_DIR_PATH, ALARM_DIR_PATH, SYS_LOG_PATH = "/pressure_dir", "/alarm_dir", "/sysLog_dir"
local fileType, fileSize, fileName
--[[
    函数名：generateLogTask(logValue,logType)
    功能：根据日志类型及日志内容生成日志文件
    参数：日志内容，日志类型
    返回值：无                     ]]
local function delOldLogFlie(cntTurn, logTypeturn)
    local cntFileName
    if logTypeturn == "pressure" then
        if io.opendir(PREESURE_DIR_PATH) then
            while true do
                fileType, fileName, fileSize = io.readdir()
                if not fileName then
                    break
                end
                cntFileName = tonumber(string.sub(fileName, -7, -5))
                if cntTurn > 500 then
                    if cntFileName == (cntTurn - 500) then
                        os.remove(PREESURE_DIR_PATH .. "/" .. fileName)
                        break
                    end
                elseif cntTurn <= 500 then
                    if cntFileName == cntTurn then
                        os.remove(PREESURE_DIR_PATH .. "/" .. fileName)
                        break
                    end
                end
            end
            io.closedir()
        else
            print("目录不存在或者输入目录地址有误")
        end
    elseif logTypeturn == "alarm" then
        if io.opendir(ALARM_DIR_PATH) then
            while true do
                fileType, fileName, fileSize = io.readdir()
                if not fileName then
                    break
                end
                cntFileName = tonumber(string.sub(fileName, -7, -5))
                if cntTurn > 500 then
                    if cntFileName == (cntTurn - 200) then
                        os.remove(ALARM_DIR_PATH .. "/" .. fileName)
                        break
                    end
                elseif cntTurn <= 200 then
                    if cntFileName == cntTurn then
                        os.remove(ALARM_DIR_PATH .. "/" .. fileName)
                        break
                    end
                end
            end
            io.closedir()
        else
            print("目录不存在或者输入目录地址有误")
        end
    end
end
--[[
    函数名：generateLogTask(logValue,logType)
    功能：根据日志类型及日志内容生成日志文件
    参数：日志内容，日志类型
    返回值：无                     ]]
function generateLogTask(logValue, logType, cnt)
    local clientNo, sysTime, preFileName, date,filehandle = nvm.get("ClientNo"), os.time().."000", "", string.format("%04d-%02d-%02d",
        os.date("*t").year, os.date("*t").month, os.date("*t").day)
        log.info("FSSize:",tostring(rtos.get_fs_free_size()))
    if logType == "pressure" then
        if rtos.make_dir(PREESURE_DIR_PATH) then
            if cnt <= 500 then
                delOldLogFlie(cnt, logType)
                fileName = PREESURE_DIR_PATH .. "/" .. sysTime .. logType .. cnt .. ".txt"
                log.info("fileNamePressure:",fileName)
            elseif cnt > 500 and cnt <= 1000 then
                delOldLogFlie(cnt, logType)
                fileName = PREESURE_DIR_PATH .. "/" .. sysTime .. logType .. (cnt - 500) .. ".txt"
                log.info("fileNamePressure:",fileName)
            end
            filehandle = io.open(fileName, "a+") -- 第一个参数是文件名，后一个是打开模式'r'读模式,'w'写模式，对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
            log.info("pressureFilehandle", filehandle)
            if filehandle then
                log.info("logvalue", logValue)
                filehandle:write(logValue) -- 写入要写入的内容
                filehandle:close()
            else
                print("文件不存在或文件输入格式不正确") -- 打开失败
            end
        else
            print("实时压力日志目录创建失败")
        end
    elseif logType == "alarm" then
        if rtos.make_dir(ALARM_DIR_PATH) then
            if cnt <= 200 then
                delOldLogFlie(cnt, logType)
                fileName = ALARM_DIR_PATH .. "/" .. sysTime .. logType .. cnt .. ".txt"
            elseif cnt > 200 and cnt <= 400 then
                delOldLogFlie(cnt, logType)
                fileName = ALARM_DIR_PATH .. "/" .. sysTime .. logType .. (cnt - 200) .. ".txt"
            end
            filehandle = io.open(fileName, "a+") -- 第一个参数是文件名，后一个是打开模式'r'读模式,'w'写模式，对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
            log.info("alarmFilehandle", filehandle)
            if filehandle then
                log.info("logvalue", logValue)
                filehandle:write(logValue) -- 写入要写入的内容
                filehandle:close()
            else
                print("文件不存在或文件输入格式不正确") -- 打开失败
            end
        else
            print("报警日志创建目录失败")
        end
    elseif logType == "sysLog" then
        if rtos.make_dir(SYS_LOG_PATH) then
            preFileName = clientNo .. "-" .. date
            fileName = SYS_LOG_PATH .. "/" .. preFileName .. ".log"
            filehandle = io.open(fileName, "a+") -- 第一个参数是文件名，后一个是打开模式'r'读模式,'w'写模式，对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
            if filehandle then
                filehandle:write(logValue) -- 写入要写入的内容
                filehandle:close()
            else
                print("文件不存在或文件输入格式不正确") -- 打开失败
            end
        else
            print("系统日志创建目录失败")
        end
    end

end

--[[
    函数名：readfile(filename)
    功能：打开所输入文件名的文件，并输出储存在里面额内容
    参数：文件名
    返回值：无                     ]]
function readfile(filename) -- 打开指定文件并输出内容
    local filehandle = io.open(filename, "r") -- 第一个参数是文件名，第二个是打开方式，'r'读模式,'w'写模式，对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
    if filehandle then -- 判断文件是否存在
        local fileval = filehandle:read("*all") -- 读出文件内容
        if fileval then
            print(fileval) -- 如果文件存在，打印文件内容
            filehandle:close() -- 关闭文件
        else
            print("文件为空") -- 文件不存在
        end
    else
        print("文件不存在或文件输入格式不正确") -- 打开失败
    end
end

--[[
    函数名： writevala(filename,value)
    功能：向输入的文件中添加内容，内容附加在原文件内容之后
    参数：第一个文件名，第二个需要添加的内容
    返回值：无                         --]]
function writevala(filename, value) -- 在指定文件中添加内容,函数名最后一位就是打开的模式
    local filehandle = io.open(filename, "a+") -- 第一个参数是文件名，后一个是打开模式'r'读模式,'w'写模式，对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
    log.info("filehandle", filehandle)
    if filehandle then
        filehandle:write(value) -- 写入要写入的内容
        filehandle:close()
    else
        print("文件不存在或文件输入格式不正确") -- 打开失败
    end
end

--[[
    函数名：writevalw(filename,value)
    功能：向输入文件中添加内容，新添加的内容会覆盖掉原文件中的内容
    参数：同上
    返回值：无                 --]]
--[[ function writevalw(filename, value) --在指定文件中添加内容
    local filehandle = io.open(filename, "w") --第一个参数是文件名，后一个是打开模式'r'读模式,'w'写模式，对数据进行覆盖,'a'附加模式,'b'加在模式后面表示以二进制形式打开
    if filehandle then
        filehandle:write(value) --写入要写入的内容
        filehandle:close()
    else
        print("文件不存在或文件输入格式不正确") --打开失败
    end
end ]]

-- 打印文件系统的剩余空间
print("get_fs_free_size: " .. rtos.get_fs_free_size() .. " Bytes")
